                             - 248 -

               2.    .

        ,   
   .     
,      ,      
     ,  
 .      -
  ;      
,            .
,        -
  ,      ,  MS  DOS  ""
     .       
,          -
.             
    :

             

 160K     4            64                9
 180K     4            64                9
 320K     7          112               15
 360K     7          112               15
 1.2M    14          224               29
 10M         ----------------------
 20M         ----------------------

           
       . 
    MS DOS,   XT  AT    
 32 ,      512 .
     ,    ,   32 
     ,    .
         16-
  .    32-     
:

    0-7    
        8-10    
          11    
       12-21   
       22-23       
       24-25       
       26-27    
       28-31    

      3-   .
      ,     
 ( ASCII  32).       
 ,     ..  [5.2.6].   -
     ,    
   .       ,  
       [5.2.5].
             
 (FAT),    [5.1.1].  FAT  -
       ,     
   .  FAT      ,
  1 ,   .  -
      FAT   
, ,         .

                             - 249 -

           
  FAT,          
.       
  ,            
  .

                             - 250 -

   5.2.1 /  .

         (
)   (  [5.2.3]).   
     -    ,    
 ,         .  
         -
        DOS.  
     .        
        ,   DOS
   .
            
  ,     [5.4.2],  
   .       
,         .  , 
 ,     32-  
  ,        
.       32    
 .        -
       32- .     
    ,     -
   .
             
         .  -
          -
 ,      .   ,
          .
      ,   
,        .

    .

         FILES.     
  . FILES      ;
    FILES "A:"  ..  -
,        , 
FILES  "A:MYFILE.DAT".           
  *  ?.   FILES   -
,            
.         
      ,    .
     [5.2.3].
      ,    ,
     ,    [5.4.2].
        ,   ,
   ,          32-
.     , -
     .    ,     
    E5H,     -
   .  ,   
 ,    FAT.   -
        
 FAT.       2-      
 26   .

                             - 251 -

100 '''       &H2000
110 INPUT "Enter erased filename ", FNAME$
120 IF LEN(FNAME$) > 12 THEN BEEP: GOTO 110
130 IF INSTR(FNAME$,".") > 9 THEN BEEP: GOTO 110
140 '''     
150 Y = INSTR(FNAME$,".")
160 IF Y = 0 THEN FIRSTPART$ = FNAME$: GOTO 230
170 EXTEN$ = LEFT$(FNAME$, LEN(FNAME$) - Y)
180 EXTEN$ = EXTEN$ + STRING$(3 - LEN(EXTEN$),"")
190 FIRSTPART$ = RIGHT$(FNAME$,Y - 1)
200 FIRSTPART$ = FIRSTPART$ + STRING$(8 - LEN(FIRSTPART$),"")
210 FNAME$ = FIRSTPART$ + EXTEN$
220 '''    
230 MID$(FNAME$,1,1) = CHR$(&HE5)  '  
240 DIRPTR = 0                     '  
250 FIELDPTR = 26                  '   
260 FOR N = 1 TO 112               '  112 
270 X$ = ""                        ' X$
280 FOR M = 0 TO 10                '    
290 X$ = X$ + PEEK(DIRPTR + M)     '  
300 NEXT                           '
310 IF X$ = FNAME$ THEN 340        '   
320 NEXT                           ' ,  
330 PRINT "Too late - file entry obliterated": END  ' 
340 X = PEEK(DIRPTR + FIELDPTR)    ' ,  1-  
350 Y = PEEK(DIRPTR + FIELDPTR + 1)  '2-   
360 Z = X + 256*Y                  '    Z

    .

   MS  DOS       ,  
 ,     ,   -
 ,    .    
         ,  -
    ,       
.   ,      
 .

 FCB:

    11H  21H    .  -
 DS:DX   FCB    .  
AL     0,   ,  FF -   .   DTA
   .    FCB  
DTA      (1 = A   ..),     32
    .     FCB  7
     7   FCB, -
     ,   32  - 
.

;---  
FCB     DB    1,'NEWDATABAK',25DUP(0)

;--- 
   MOV  AH,11H    ;   
   LEA  DX,FCB    ;  FCB
   INT  21H       ;
   CMP  AL,0      ;?
   JNE  NO_FILE   ; ,    
   LEA  BX,DTA    ; DS:BX    

                             - 252 -

      11H    12H
    ,    -
 .         
"?",   "*".           ,  
,     ,      
DTA    .

  :

    4EH  21H        . DS:DX
   ,   . , B:\EURO-
PE\FRANCE\PARIS      PARIS.   
  63     ASCII 0.     
 ,   "?",    "*".  
  CX;     0,     -
  [5.2.6]   .
        ,    -
.     ,    DTA    
.      DTA  -
  - , DTA   MS DOS  -
  FCB.  21   DTA   DOS  
   .      
,     ,      
 .  4     (
 ).  , ,       -
  ,   ASCII 0.   (ASCII  46)
            -
 .

;---  
PATH       DB     'B:FRANCE\PARIS\4EME',0

;--- 
   MOV  AH,4EH        ; 
   LEA  DX,PATH       ;DS:DX   
   MOV  CX,0          ;  
   INT  21H           ; 
   JC   NO_FILE       ;,   
   LEA  BX,DTA        ;DS:BX   DTA
   MOV  AL,[BX]+21    ;    AL

        (   )
     4FH    21H.     
    ,    4EH,     DTA  
 .      ,  -
  ,   AX  18.

                             - 253 -

   5.2.2 / .

         ,  -
   .       ,
          .
    ,     
     .   ,    -
 ,      (, 
          ).
 ,     .

    .

        MKDIR ( )   RMDIR
( ).           
 ,   63 ,   -
.       .   -
    STORKS   BIRDS  MKDIR  "B:MAM-
MALS\BIRDS\STORKS".         
 STORKS,       
       STORKS   
 BIRDS.       
    [5.3.2].      RMDIR
"B:MAMMALS\BIRDS\STORKS".
        ,     
  .  ,     -
  -     ,    
,      . , 
    BIRDS,      -
    STORKS          MKDIR
"\STORKS"  RMDIR "\STORKS".

    .

         
,         -
  .

 :
   DS:DX     ,      
,      .   
    ASCII 0.       
PRIMATES     A:    
 "A:\PRIMATES".      
  MAMMALS  "A:\MAMMALS\PRIMATES".    
A:        , -
    ,        .
  AH 39H      21H;   -
 ,     .     
   ,  AX     3
( )  5 ( ).     -
 PRIMATES:

                             - 254 -

;---  
PATH    DB   'A:MAMMALS\PRIMATES',0

;---    PRIMATES
   LEA  DX,PATH     ;DS:DX    
   MOV  AH,39H      ; 
   INT  21H         ; 
   JC   ERROR_ROUT  ; 

 :
        ,  
   ,        .
   AH 3AH      21H.   
     AX    3  5 (  5
 ,   ).

                             - 255 -

   5.2.3 / .

         ,  -
  ,       ,      
 .     -
 ,   ,   -
,       (   5 -
.  [5.2.6]).      32--
 ,        ,   - 
.          .
           
  .
   ,         
 ,         
.   ,   ,  MS DOS   0   
   ,   .   -
 DOS ,        -
  .      .

    .

      FILES      
    ; , FILES  "B:MAMMALS\BIRDS"
  ,    BIRDS.   
            
   .  ,  FILES "LEVEL1\NEWDATA"
   NEWDATA    ,   .     
      ,     
      .  -
         .
    ,     63.  -
    ,     [5.4.8].  
  ,        
 (       "EXISTS").    
,       ,       
 .

100 ON ERROR GOTO 1000      '  
110 EXISTS = 1              '  ""
120 INPUT "Enter filename: ",S$  '  
130 OPEN S$ FOR INPUT AS #3 '   . 
140 IF EXISTS = 0 THEN BEEP: PRINT "File does not exist"
 .
 .
1000 IF ERR = 53 THEN 1500  '  ?
1010 IF ERR = 64 THEN ...   ' 
 .
1500 EXISTS = 0             '  
1510 RESUME 140             '  

    .

         ,  -
      [5.2.1]    
    .       
      4EH    
*.*,    ,   4FH.  
   ,     ,   AL  

                             - 256 -

  18.   ,      -
,  DTA     ,   
  (  DTA  ,   -
 ).        
 .

;---  
PATH     DB   'A:MAMMALS\*.*',0
DTAH     DB   256 DUP(?)

;--- DTA
            LEA  DX,DTA        ;DS:DX   DTA
            MOV  AH,1AH        ;  DTA
            INT  21H           ; DTA
;---  
            MOV  AH,4EH        ; 
            LEA  DX,PATH       ;   
            MOV  CX,0          ;  
            INT  21H           ; *.*
            JC   ERROR         ; 
;---  
NEXT_LINE:  LEA  BX,DTA        ;BX   DTA
            ADD  BX,30         ;   
NEXT_CHAR:  MOV  DL,[BX]       ;   
            CMP  DL,0          ;   
            JE   END_STR       ;,  
            MOV  AH,2          ;,  
            INT  21H           ;
            INC  BX            ; 
            JMP  SHORT NEXT_CHAR  ; 
;--- /    
END_STR:    MOV  AH,2          ;  
            MOV  DL,13         ;  
            INT  21H           ;
            MOV  DL,10         ;  
            INT  21H           ;
;---  
            LEA  DX,PATH       ;   
            MOV  AH,4FH        ; 
            INT  21H           ;  
            JC   FINISHED      ; ,  
            JMP  SHORT NEXT_LINE  ;   
FINISHED:

                             - 257 -

   5.2.4 /  .

         ,   DOS   ,  
   .    ,  -
    .

    .

           CHDIR.
    ,    ,
   .     63- ,
  ,      .  CHDIR
"C:MAMMALS\PRIMATES\GIBBONS"      GIBBONS  
.          CHDIR "\"
 CHDIR "B:\".
     3.0      , 
      DOS   PATH.       PRINT  ENVI-
RON$("PATH").

    .

     3BH   21H      .
DS:DX             
     ASCII 0. , B:BIRDS\-
PARROTS\POLLY  POLLY  .  B:   -
,         [5.3.1].   
        A:  A:\. 
    POLLY:

;---  
PATH     DB   'B:BIRDS\PARROTS\POLLY',0

;--- POLLY  
   MOV  AH,3BH        ; 
   LEA  DX,PATH       ;DS:DX    
   INT  21H           ;  

          -
  47H   21H.  DS:SI     -
    64 ,     .  
DL  ,   0 = " ", 1 = A, 2 =
B  ..        -
.      ,   AL -
   15.       -
 ,       .  ASCII 0 -
     .        
  "CURRENT_DIR":

;---  
CURRENT_DIR   DB   64 DUP(?)

;---  
   MOV  AH,47H         ; 
   LEA  SI,CURRENT_DIR ;   
   MOV  DL,1           ; A
   INT  21H            ;    DS:SI

                             - 258 -

   5.2.5 /       
.

      ,   22-23 32-  
      .  24-25 -
 .   :

:   11-15     (0-23)
              5-10     (0-59)
               0-4     (0-29  2- )

:     9-15     (0-119,   1980 )
               5-8     (1-12)
               0-4     (1-31)

    ; DOS      -
.    ,      ,     
2-     ,  .

    .

               
         ,  
.     FCB   0FH   21H,  
       . 
   FCB   14H [5.3.5].
      ,        
  ,        
  .   57H  21H   -
.          BX,  0
 AL.         AL 1.  
    DX,    CX.   -
  ,    .      
MS DOS ,        CH
  DH,  .       .    
   ,   AX  1, 
  AL     6,    -
.     ,    
  :

;---  
PATH   DB   'B:NEWDATA.BAK',0
;--- 
   LEA  DX,PATH         ;   
   MOV  AH,3DH          ;  
   MOV  AL,0            ;  
   INT  21H             ; 
   JC   OPEN_ERROR      ;   
;---      
   MOV  BX,AX           ;    BX
   MOV  AL,0            ;   
   MOV  AH,57H          ; 
   INT  21H             ;  
   JC   TIME_ERROR      ;   
;--- ,   ,   CH
   MOV  CL,3            ; 
   SHR  CH,CL           ; CH   

                             - 259 -

   5.2.6      .

   DOS      ,  
   .      
   (  ).  
12-  32-    .    
 ,      .  :

     5 = 1,         
                     
            4 = 1,      
            3 = 1,        ,  
                     
            2 = 1,      ""
            1 = 1,         
            0 = 1,        

 5   ,   BACKUP  RESTORE
DOS.     0    ,
    .    -
      .

    .

             .
  [5.2.1],     ,   
,        .   
   ,      -
 11, 43, 75  ..  ,     
      ,     
,     .      
  .    ,     -
.           
"NEWDATA.AAA".

100 '  ,   &H2000   ...
110 DEF SEG = &H2000         '   
120 FILENAME$ = "NEWDATAAAA" '    
130 DIRPTR = 0               '  
140 FOR N = 1 TO 112         '  
150 X$ = ""                  '    
160 FOR M = 0 TO 10          '   
170 X$ = X$+PEEK(DIRPTR+M)   '   
180 NEXT                     '
190 IF X$ = FILENAME$ THEN 220  '  ,  
200 NEXT                     '
210 PRINT "File not found": END  '  
220 X = PEEK(DIRPTR+11)      '   
230 IF X AND 32 <> 0 THEN PRINT "File not baked up"
240 IF X AND 16 <> 0 THEN PRINT "File is a subdirectory"
250 IF X AND 8 <> 0 THEN PRINT "Volume label - not a file"
260 IF X AND 4 <> 0 THEN PRINT "File is a system file"
270 IF X AND 2 <> 0 THEN PRINT "File is a hidden file"
280 IF X AND 1 <> 0 THEN PRINT "File is read-only"

                             - 260 -

    .

    43H  21H    ,   
  ,          
 ,            
.     FCB.    
       [5.3.2],    
  .       FCB,
          ,   
  . , ,   -
  -    ,    -
 ,    .
      43H,  1  AL,   -
    ,     CX (   
CL,  CH  0).     AL 0, 
 CX      .    
DS:DX      ,     .   
   ASCII 0  (     63-
).     "hidden" ()  
 OVERDUE:

;---  
PATH   DB   'A:ACCOUNTS',0

;---   
   MOV  AH,43H          ; 
   MOV  AL,0            ;  
   LEA  DX,PATH         ;DS:DX   
   INT  21H             ;   CX
   JC   ERROR_ROUTINE   ; 
   OR   CL,10B          ;  1
   MOV  AH,43H          ; 
   MOV  AL,1            ;  
   INT  21H             ;   

       .   
    AX  2 -    , 3 -    
   5 -    ( ).

                             - 261 -

   5.2.7 /  .

       -      ,  -
 .    11  , -
     .     11
  8 ( 3 = 1).      
 .       , 
      DIR.
           .     
    ,      
8.          E5    
  -        .
        11    (
    ).        ,
   ,        
    ,    .

    .

     [5.4.2]       
   .        
   0,    0,   - 6
     / - 7.   ,   
    ,  ,     
       .  
         .  :
        .   
      :

100 ' ,    &H1000
110 DEF SEG = &H1000
120 DIRPTR = 11           '   
130 FOR N = 1 TO 112      '   
140 IF PEEK(DIRPTR) = 8 THEN 180  '   
150 DIRPTR = DIRPTR + 32  '  . 
160 NEXT                  '  
170 PRINT "No volume label found": END  ' 
180 INPUT "Enter new volume label", V$  ' 
190 IF LEN(V$) > 11 THEN BEEP: PRINT "11 chars only": GOTO 180
200 V$ = V$ + STRING$(11-LEN(V$),32)  ' 
210 DIRPTR = DIRPTR - 11  '   
220 FOR N = 1 TO LEN(V$)  '   
230 POKE N,MID$(V$,N,1)   ' 
240 NEXT                  '
250 '     

    .

      ,    
   3584 ,      -
   360K.    DIR_AREA.   
     , ,     ,
      .      
       ;    
  ,     [1.3.1].

                             - 262 -

;---  
VOL_STRING   DB    'The volume label is $'
NO_LABEL     DB    'There is no volume label $'
DIR_AREA     DB    3584 DUP(?)

;--- 7  
         MOV  AX,SEG DIR_AREA         ; 
         MOV  ES,AX                   ;
         MOV  BX,OFFSET DIR_AREA      ; 
         MOV  DL,0                    ; 
         MOV  DH,0                    ; 
         MOV  CH,0                    ; 
         MOV  CL,6                    ; 
         MOV  AL,7                    ;  
         MOV  AH,2                    ;  
         INT  13H                     ;   
;---  ,     8
         MOV  CX,112                  ; 
         ADD  BX,11                   ;  
TRY_AGAIN:   MOV  AL,[BX]             ; 1- 
         CMP  AL,8                    ;  ?
         JE   GOT_IT                  ; ,  
         ADD  BX,32                   ;  . 
         LOOP TRY_AGAIN               ;
;---     
         MOV  AH,9                    ;  
         LEA  DX,NO_LABEL             ;  
         INT  21H                     ; 
         JMP  SHORT CONTINUE          ; 
;--- ,   
GOT_IT:  MOV  AH,9                    ;  
         LEA  DX,VOL_STRING           ;  
         INT  21H                     ; 
         SUB  BX,11                   ;  
         MOV  CX,11                   ; 11 
         MOV  AH,2                    ;  
NEXT_CHAR:   MOV  DL,[BX]             ;  DL
         INT  21H                     ; 
         INC  BX                      ;  
         LOOP NEXT_CHAR               ;
CONTINUE:

       GOT_IT:

GOT_IT:   MOV  AL,0E5H     ;   
          SUB  BX,11       ;   
          MOV  [BX],AL     ;  

     ,         
GOT_IT  .  ,     -
11-  NEW_LABEL.

GOT_IT:   LEA  SI,NEW_LABEL  ;SI    
          SUB  BX,11         ;BX    
          MOV  DI,BX         ;   DI
          MOV  CX,11         ; 11 
REP       MOVSB              ; 

                             - 263 -

              , 
       8 (   
 ASCII 8  ,     ,   
     ).
   ,  ,       ,  
    .    .

;---     
   MOV  AX,SEG DIR_AREA        ;    
   MOV  ES,AX                  ;
   MOV  BX,OFFSET DIR_AREA     ;
   MOV  DL,0                   ;
   MOV  DH,0                   ;
   MOV  CH,0                   ;
   MOV  CL,6                   ;
   MOV  AL,7                   ;
   MOV  AH,3                   ;   
   INT  13H                    ;